perm filename PART16.TEX[TEX,RWF] blob
sn#534470 filedate 1980-09-19 generic text, type C, neo UTF8
COMMENT ā VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 \sample
C00005 00003 \sample
C00009 00004 \sample
C00012 ENDMK
Cā;
\sample
\sendnotes{Blank removing example}
\startcode
(****************************************************************)
(* *)
(* REMOVING LEADING AND MULTIPLE BLANKS FROM A LINE OF TEXT *)
(* *)
(****************************************************************)
PROGRAM KILLBLANKS ( INPUT*, OUTPUT ) ;
CONST TABSIZE = 60 ;
VAR I, J, K : INTEGER ;
SOURCE,
TARGET : ARRAY[0..TABSIZE] OF CHAR ;
(* INPUT AND OUTPUT LINES OF TEXT *)
BEGIN
(* READ INPUT LINE *)
FOR I := 1 TO TAB_SIZE DO READ ( SOURCE[I] ) ;
(* INITIALIZE *)
SOURCE[0] := ' ' ;
I := 1 ;
J := 1 ;
\allowbreak
WHILE I <= TABSIZE DO
BEGIN
IF ( SOURCE[ I-1 ] <> ' ' ) OR ( SOURCE[ I ] <> ' ' ) THEN
BEGIN
TARGET[J] := SOURCE[I] ;
J := J + 1
END ;
I := I + 1
END;
\allowbreak
FOR K := J TO TABSIZE DO TARGET[K] := ' ' ;
\allowbreak
(* OUTPUT *)
FOR K := 1 TO TABSIZE DO WRITE ( SOURCE[K] ) ;
WRITELN ;
FOR K := 1 TO TABSIZE DO WRITE ( TARGET[K] )
END.
\endcode
\topoutput
DRAGONRIDERS MUST FLY WHEN THREADS ARE IN THE SKY
DRAGONRIDERS MUST FLY WHEN THREADS ARE IN THE SKY
\botoutput
\sample
\startcode
(****************************************************************)
(* *)
(* SEQUENTIAL TABLE LOOKUP IN THE OBVIOUS WAY. *)
(* *)
(****************************************************************)
PROGRAM LOOKUP ( INPUT*, OUTPUT ) ;
VAR SEARCHNUM ,
I : INTEGER ;
TABLE : ARRAY[1..11] OF INTEGER ;
(* NOTE THAT WE MUST DECLARE THE ARRAY SIZE ONE *)
(* BIGGER THAN THE TABLE SIZE TO PREVENT THE INDEX *)
(* FROM GOING OUT OF BOUNDS WHEN THE NUMBER WE'RE *)
(* LOOKING FOR IS NOT FOUND. *)
BEGIN
FOR I := 1 TO 10 DO READ ( TABLE[I] ) ;
READ ( SEARCHNUM ) ;
I := 1 ;
WHILE ( TABLE[I] <> SEARCHNUM ) AND ( I <= 10 ) DO I := I + 1 ;
IF I <= 10 THEN WRITELN ( SEARCHNUM :4, ' FOUND AT POSITION', I :4 )
ELSE WRITELN ( SEARCHNUM :4, ' NOT FOUND' )
END.
\endcode
\startcode
(****************************************************************)
(* *)
(* SEQUENTIAL TABLE LOOKUP IN A CLEVER WAY *)
(* *)
(****************************************************************)
PROGRAM LOOKUP ( INPUT*, OUTPUT ) ;
VAR SEARCHNUM,
I : INTEGER ;
TABLE : ARRAY[1..11] OF INTEGER ;
(* NOTE THAT WE MUST DECLARE THE ARRAY SIZE ONE *)
(* BIGGER THAN THE TABLE SIZE TO PREVENT THE INDEX *)
(* FROM GOING OUT OF BOUNDS WHEN THE NUMBER WE'RE *)
(* LOOKING FOR IS NOT FOUND. *)
BEGIN
FOR I := 1 TO 10 DO READ ( TABLE[I] ) ;
READ ( SEARCHNUM ) ;
I := 1 ;
TABLE[11] := SEARCHNUM ; (* GUARANTEES FINDING THE NUMBER IN ARRAY *)
WHILE ( TABLE[I] <> SEARCHNUM ) DO I := I + 1 ;
IF I <= 10 THEN WRITELN ( SEARCHNUM :4, ' FOUND AT POSITION', I :4 )
ELSE WRITELN ( SEARCHNUM :4, ' NOT FOUND' )
END.
/endcode
\sample
\sendnotes{procedure example}
\startcode
(**********************************************************************)
(* *)
(* THIS PROGRAM DEMONSTRATES THE USE OF PROCEDURES AND THE DIFFERENT *)
(* WAYS OF COMMUNICATION BETWEEN THE CALLING PROGRAM AND A PROCEDURE *)
(* 1) NO COMMUNICATION AT ALL. *)
(* 2) TWO WAY COMMUNICATION VIA GLOBAL VARIABLES. *)
(* 3) ONE WAY COMMUNICATION VIA ( VALUE ) PARAMETERS. *)
(* 4) TWO WAY COMMUNICATION VIA ( REFERENCE ) PARAMETERS. *)
(* *)
(**********************************************************************)
PROGRAM DEMOPROC ( OUTPUT ) ;
PROCEDURE WRITESTARS ;
VAR I : INTEGER ;
BEGIN
FOR I := 1 TO 12 DO WRITE ( '*' ) ;
WRITELN
END ; (* WRITESTARS *)
BEGIN (* MAIN *)
WRITESTARS ;
WRITELN ( SQRT(2.0) ) ;
WRITESTARS
END. (* MAIN *)
\endcode
\topoutput
************
1.414213567
************
\botoutput
\startcode
PROGRAM DEMOPROC ( INPUT*, OUTPUT ) ;
VAR N : INTEGER ;
PROCEDURE WRITESTARS ;
VAR I : INTEGER ;
BEGIN
FOR I := 1 TO N DO WRITE ( '*' ) ;
N := N + 2 ;
WRITELN
END ; (* WRITESTARS *)
BEGIN (* MAIN *)
READ ( N ) ;
WRITESTARS ;
WRITELN ( SQRT(2.0) ) ;
WRITESTARS
END. (* MAIN *)
\endcode
\topoutput
************
1.414213567
**************
\botoutput